#include <map>
#include <string>
#include <sstream>
#include <vector>
#include <iostream>

using namespace std;

/*
22 -> "er shi er"
1234 -> "yi qian er bai san shi si"
12345678 -> "yi qian er bai san shi si wan ..."
12 2345 6789 -> "yi yi ..."
*/
// int -> string
// 1 -> "yi", 2 -> "er"
map<int, string> chinese {
  {0, "ling"}, {1, "yi"}, {2, "er"}, {3, "san"}, {4, "si"}, {5, "wu"},
  {6, "liu"}, {7, "qi"}, {8, "ba"}, {9, "jiu"}
};

// 读 10000 以下的阿拉伯数字，返回它的中文读法
// 1201
// 1021
// 1001 yi qian ling yi
// 1000
// 如果千位不等于 0，只要这个数字不能被 1000 整除，就需要读 0.

// 0121
// 1210
string readNum(int n) {
  ostringstream oss;
  
  bool isReadZero = false; // 已经读过 0 了
  bool needToReadZero = false; // 需要读 0

  int q = n / 1000;
  n %= 1000; // 让 n 等于除去千位后剩余的部分
  if (q != 0) {
    oss << chinese[q] << " qian ";
    needToReadZero = (n != 0);
  }

  // 处理百位数字
  q = n / 100;
  n %= 100;
  if (q != 0) {
    oss << chinese[q] << " bai ";
  }
  else if (!isReadZero&& needToReadZero) {
    oss << "ling ";
    isReadZero = true;
  }

  // 处理十位数字
  q = n / 10;
  n %= 10;
  if (q != 0) {
    oss << chinese[q] << " shi ";
  }

  // 处理个位数字
  if (n != 0) {
    oss << chinese[n];
  }

  return oss.str();
}

// string solution(long n) {
//   // 分段读
// }

// 1 <= n <= 9999
// 把数字 n 的每一位 从高到低 解析，保存在返回值里
// 3456 -> [3, 4, 5, 6]
vector<int> parseInt(int n) {
  
}


int main(int argc, char const *argv[])
{
  /* code */
  cout << readNum(1021) << endl;
  return 0;
}
